#!/usr/bin/env bash

############################################################################
#
# 远程执行该脚本，请在命令行中直接执行以下命令：
#
#   curl -sSL https://gitee.com/tay3223/biubiubiu/raw/master/centos7-install-pyenv.sh | /bin/bash
#
#
############################################################################


#每个依赖项都是在手工ISO镜像安装的的centos7.9虚拟机上，一个一个实验出来的，缺一不可。
yum install -y gcc \
		zlib-devel \
		bzip2-devel \
		openssl-devel \
		ncurses-devel \
		sqlite-devel \
		readline-devel \
		tk-devel \
		gdbm-devel \
		db4-devel \
		libpcap-devel \
		xz-devel \
		git \
		wget \
		patch \
		libffi-devel \
		mysql-devel


#克隆pyenv仓库（需要定时去gitee上同步一下最新的版本）
git clone https://gitee.com/expedite/pyenv.git ~/.pyenv

#克隆pyenv-virtualenv仓库
mkdir -p ~/.pyenv/plugins
git clone https://gitee.com/expedite/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv


#判断环境变量中是否已经被写入全局配置
if (grep "PYENV_ROOT" /etc/profile); then
    echo "存在PYENV_ROOT环境变量，跳过写入配置项的步骤..."
else
    echo "开始写入环境变量..."


cat << \EOF >> /etc/profile

#pyenv配置
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
EOF


    mkdir -p ~/.pyenv/cache
    wget -P ~/.pyenv/cache https://osoc.oss-cn-shanghai.aliyuncs.com/bao/python/tar_xz/Python-2.7.18.tar.xz
    #wget -P ~/.pyenv/cache https://osoc.oss-cn-shanghai.aliyuncs.com/bao/python/tar_xz/Python-3.6.15.tar.xz
    wget -P ~/.pyenv/cache https://osoc.oss-cn-shanghai.aliyuncs.com/bao/python/tar_xz/Python-3.7.15.tar.xz
    #wget -P ~/.pyenv/cache https://osoc.oss-cn-shanghai.aliyuncs.com/bao/python/tar_xz/Python-3.8.15.tar.xz
    wget -P ~/.pyenv/cache https://osoc.oss-cn-shanghai.aliyuncs.com/bao/python/tar_xz/Python-3.9.15.tar.xz
fi


#pip国内加速
mkdir -p  ~/.pip
tee ~/.pip/pip.conf <<EOF

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com

EOF




#命令行提示
cat <<Tay

====================================
1.pyenv安装成功（√ ）
2.相关命令：
    pyenv versions
    pyenv install --list
    pyenv install -v 3.7.15

3.离线安装指引：
    mkdir -p ~/.pyenv/cache
    cd ~/.pyenv/cache
    wget https://osoc.oss-cn-shanghai.aliyuncs.com/bao/python/tar_xz/Python-3.7.15.tar.xz (必须是tar.xz结尾)

4.以下安装包已下载到~/.pyenv/cache目录中了：
    https://osoc.oss-cn-shanghai.aliyuncs.com/bao/python/tar_xz/Python-2.7.18.tar.xz
    https://osoc.oss-cn-shanghai.aliyuncs.com/bao/python/tar_xz/Python-3.6.15.tar.xz
    https://osoc.oss-cn-shanghai.aliyuncs.com/bao/python/tar_xz/Python-3.7.15.tar.xz
    https://osoc.oss-cn-shanghai.aliyuncs.com/bao/python/tar_xz/Python-3.8.15.tar.xz
    https://osoc.oss-cn-shanghai.aliyuncs.com/bao/python/tar_xz/Python-3.9.15.tar.xz
====================================

Tay


#写入帮助信息到用户家目录中
cat << EOF > ~/pyenv_command.conf
# 创建新的环境,位于 ~/.pyenv/versions/
$ pyenv virtualenv 3.7.15 env3715

# 查看所有的虚拟环境
$ pyenv virtualenvs

# 切换到新的环境
$ pyenv activate env3715

# 退回到系统环境
$ pyenv deactivate

# 删除新创建的环境
$ rm -rf ~/.pyenv/versions/env3715/




# 查看当前 pyenv 可检测到的所有版本，处于激活状态的版本前以 * 标示。
$ pyenv versions
  system
* 3.5.1 (set by /root/.pyenv/version)
  3.5.1/envs/flask_py351
  3.5.1/envs/pelican
  flask_py351
  pelican

# 查看当前处于激活状态的版本，括号中内容表示这个版本是由哪条途径激活的（global、local、shell）
$ pyenv version
3.5.1 (set by /root/.pyenv/version)

# 使用 python-build（一个插件） 安装一个 Python 版本，到 $PYENV_ROOT/versions 路径下。
$ pyenv install -v 2.7.3

# 卸载
$ pyenv uninstall 2.7.3

# 为所有已安装的可执行文件 （如：~/.pyenv/versions/*/bin/*） 创建 shims，
# 因此，每当你增删了 Python 版本或带有可执行文件的包（如 pip）以后，都应该执行一次本命令
$ pyenv rehash

# 设置全局的 Python 版本，通过将版本号写入 ~/.pyenv/version 文件的方式。
$ pyenv global 3.4.0

# 设置面向程序的本地版本，通过将版本号写入当前目录下的 .python-version 文件的方式。
# 通过这种方式设置的 Python 版本优先级较 global 高。pyenv 会从当前目录开始向上逐级查找 .python-version 文件，直到根目录为止。
#若找不到，就用 global 版本。
$ pyenv local 2.7.3

# 设置面向 shell 的 Python 版本，通过设置当前 shell 的 PYENV_VERSION 环境变量的方式。
# 这个版本的优先级比 local 和 global 都要高。--unset 参数可以用于取消当前 shell 设定的版本。
$ pyenv shell pypy-2.2.1
$ pyenv shell --unset
EOF
